// 1.导入数据库
const mysql = require('mysql')
// 2.建立与 MySQL 数据库的连接关系
const db = mysql.createPool({
  host:'127.0.0.1', // 数据库的 IP 地址
  user:'root', // 登录数据库的账号
  password:'admin123', // 登录数据库的密码
  database:'my_db_01', // 指定要操作哪个数据库
})

// // 检测 mysql 模块能否正常工作
// db.query('select * from users',(err,results) => {
//   // mysql 模块工作期间报错了
//   if (err) return console.log(err)
//   // 能够成功执行 SQL 语句
//   console.log(results)
// })

// 1.查询 users 表中所有的数据
// const sqlStr = `select * from users`

// 2.按照 status 降序排序
// const sqlStr = `select * from users order by status desc`

// 3.查询总的数据条数
// const sqlStr = `select count(*) from users where status=0`


// 检测 mysql 模块能否正常工作
// db.query(sqlStr,(err,results) => {
//   // 查询数据失败
//   if (err) return console.log(err.message)
//   // 查询数据成功
//   // 如果执行的是 select 语句，则返回的数据是数组
//   console.log(results)
// })

/* // 4.插入数据
// 4.1 要插入到 users 表中的数据对象
const user = { username:'Spider-man',password:'pcc123' }
// 4.2 插入语句，其中 ? 表示占位符
const sqlStr = `insert into users (username,password) values (?,?)`
// 4.3 执行 SQL 语句，使用数组的形式依次为 ? 占位符指定具体的值
db.query(sqlStr,[user.username,user.password],(err,results) => {
  // 执行 SQL 语句失败了
  if (err) return console.log(err.message)
  // 执行 SQL 语句成功了
  // 注意：如果执行的是 insert into 插入语句，则 results 是一个对象
  // 可以通过 affectedRows 属性，来判断是否插入数据成功
  if (results.affectedRows === 1) {
    console.log('插入数据成功')
  }
}) */


// 5. 插入数据的便捷方式
// 4.插入数据
/* // 4.1 要插入到 users 表中的数据对象
const user2 = { username:'xsz',password:'123321' }
// 4.2 插入语句，其中 ? 表示占位符
const sqlStr = `insert into users set ?`
// 4.3 执行 SQL 语句，使用数组的形式依次为 ? 占位符指定具体的值
db.query(sqlStr,user2,(err,results) => {
  // 执行 SQL 语句失败了
  if (err) return console.log(err.message)
  // 执行 SQL 语句成功了
  // 注意：如果执行的是 insert into 插入语句，则 results 是一个对象
  // 可以通过 affectedRows 属性，来判断是否插入数据成功
  if (results.affectedRows === 1) {
    console.log('插入数据成功')
  }
}) */

// 6.要更新的数据对象
/* const user3 = { id:7,username:'abc',password:'abc123' }
// 6.1定义 SQL 语句
const sqlStr = `update users set username=?,password=? where id=?`
// 执行 SQL 语句
db.query(sqlStr,[user3.username,user3.password,user3.id],(err,results) => {
  // 执行 SQL 语句失败了
  if (err) return console.log(err.message)
  // 执行 SQL 语句成功了
  // 注意：如果执行的是 update 更新语句，则 results 是一个对象
  // 可以通过 affectedRows 属性，来判断是否更新数据成功
  if (results.affectedRows === 1) {
    console.log('更新数据成功')
  }
})  */

// 7.更新数据的便捷方式
const user4 = { id:8,username:'jack',password:'cba123' }
// 6.1定义 SQL 语句
/* const sqlStr = `update users set ? where id=?`
// 执行 SQL 语句
db.query(sqlStr,[user4,user4.id],(err,results) => {
  // 执行 SQL 语句失败了
  if (err) return console.log(err.message)
  // 执行 SQL 语句成功了
  // 注意：如果执行的是 update 更新语句，则 results 是一个对象
  // 可以通过 affectedRows 属性，来判断是否更新数据成功
  if (results.affectedRows === 1) {
    console.log('更新数据成功')
  }
}) */ 

// 8.删除数据
// 8.1定义要执行的 SQL 语句
/* const sqlStr = `delete from users where id=?`
// 8.2 执行 SQL 语句
// 注意：如果 SQL 语句中有多个占位符，则必须使用数组为每个占位符指定具体的值
// 如果 SQL 语句只有一个占位符，则可以胜率数组
db.query(sqlStr,6,(err,results) => {
  // 删除数据失败
  if (err) return console.log(err.message)
  // 注意：如果执行的是 delete 删除语句，则 results 是一个对象
  // 可以通过 affectedRows 属性，来判断是否删除数据成功
  // 删除数据成功
  if (results.affectedRows === 1) {
    console.log('删除数据成功')
  } 
}) */

// 9.标记删除
// 使用DELETE语句,会把真正的把数据从表中删除掉。为了保险起见，推荐使用标记删除的形式，来模拟删除的动作。
// 所谓的标记删除，就是在表中设置类似于status这样的状态字段，来标记当前这条数据是否被删除。
// 当用户执行了删除的动作时，我们并没有执行DELETE语句把数据删除掉,而是执行了UPDATE语句，将这条数据对应
// 的status字段标记为删除即可。

// 9.1定义 SQL 语句
const sqlStr =  `update users set status=? where id=?`
// 9.2执行SQL语句
db.query(sqlStr,[1,8],(err,results) => {
  // 标记删除失败
  if (err) return console.log(err.message)
  // 标记删除成功
  if (results.affectedRows = 1) {
    console.log('标记删除成功')
  }
})
